﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC.OA.Common;
using MVC.OA.IBLL;

namespace MVC.OA.UI.Controllers
{
    public class UserLoginController : Controller
    {
        //
        // GET: /UserLogin/

        public IUserInfoBLL UserInfoBLL { get; set; }

        public ActionResult Index()
        {
            return View();
        }


        /// <summary>
        /// 验证码
        /// </summary>
        /// <returns></returns>
        public ActionResult ShowVCode()
        {
            ValidataCode validataCode = new ValidataCode();
            string strCode = validataCode.CreateValidateCode(4);
            //将验证码放到Session
            Session["ValidataCode"] = strCode;            
            byte[] imgBytes = validataCode.CreateValidateGraphic(strCode);
            return File(imgBytes,@"image/jpeg");
        }

        #region 处理登陆的表单

        public ActionResult ProcessLogin()
        {
            //第一步处理验证码
            //获取输入的验证码
            string inCode = Request["vCode"];
            //获取生成的验证码
            string sessionCode = Session["ValidataCode"] as string;
            //获取到之后就清空验证码
            Session["ValidataCode"] = null;
            if (string.IsNullOrEmpty(sessionCode) || inCode!=sessionCode)
            {
                return Content("验证码错误！");
            }
            //验证用户名和密码
            string name = Request["LoginUser"];
            string pwd = Request["LoginPwd"];

            var userInfo = UserInfoBLL.GetEntities(a => a.UName == name && a.Pwd == pwd).FirstOrDefault();
            if(userInfo==null)
            {
                return Content("用户名或密码错误！");
            }
           // Session["LoginUserInfo"] = userInfo;
            //将缓存信息用memcache+cookie代替之。
            //立即分配一个标志，Guid。把标志作为 mm存储数据的key，把用户对象放到 mm。 把guid写到客户端cookie里面去。
            string userLoginID = Guid.NewGuid().ToString();
            //把用户的数据写到mm,怎么解决变化：写到不同地方去，可能同时写入多个地方。
            Common.Cache.CacheHelper.AddCache(userLoginID,userInfo,DateTime.Now.AddMinutes(20));

            //往客户端写入cookie
            Response.Cookies["userLoginID"].Value = userLoginID;
            return Content("OK");
        }
        #endregion

    }
}
